package com.gitee.yongzhuzl.commonutil.util.json;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.List;

/**
 * description: JSON工具类（基于com.fasterxml.jackson）
 * @author 朱正磊
 * @date 2018-05-30 13:50:09
 */
public class JsonTool {

    private static final ObjectMapper MAPPER = new ObjectMapper();

	/**
	 * description: 将pojo对象转换成json字符串（对象也可以是Map对象）
	 * @author 朱正磊
	 * @date 2018-05-30 13:56:52
	 * @param object pojo对象
	 * @return 返回json字符串
	 */
    public static String toJson(Object object) {
        try {
            return MAPPER.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

	/**
	 * description: 将json字符串转化为pojo对象（如果不知道pojo的具体类型，我们可以使用Map）
	 * @author 朱正磊
	 * @date 2018-05-30 13:57:53
	 * @param json json字符串
	 * @param type pojo对象类型
	 * @return 返回pojo对象
	 * @param <T> 泛型
	 */
    public static <T> T toPojo(String json, Class<T> type) {
        try {
            return MAPPER.readValue(json, type);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

	/**
	 * description: 将json字符串转换成pojo对象集合（如果不知道pojo的具体类型，我们可以使用Map）
	 * @author 朱正磊
	 * @date 2018-05-30 13:59:22
	 * @param json json字符串
	 * @param type pojo对象类型
	 * @return 返回pojo对象集合
	 * @param <T> 泛型
	 */
    public static <T> List<T> toPojoList(String json, Class<T> type) {
        try {
            return MAPPER.readValue(json, MAPPER.getTypeFactory().constructParametricType(List.class, type));
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
	
}
